package com;

import io.lettuce.core.RedisClient;
import io.lettuce.core.RedisFuture;
import io.lettuce.core.RedisURI;
import io.lettuce.core.api.async.RedisAsyncCommands;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Pipeline;


import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.concurrent.ExecutionException;


public class Demo1 {

    @Test
    public void set() {
//       1 连接Redis
        Jedis jedis = new Jedis("10.9.45.184", 6379);

//      2 操作Redis  Redis命令是什么 jedis就是什么 用法一样
        jedis.set("fanzhen", "山西人");

        jedis.sadd("ffffff", "1", "2");

        jedis.zadd("s4", 100L, "shei");


        //        3 释放资源
        jedis.close();
    }

    @Test
    public void test2() throws IOException {
//        连接Redis
        Jedis jedis = new Jedis("10.9.45.184", 6379);

        User user = new User();
        user.setId(1L);
        user.setAge(18);
        user.setName("dadada");
//     创建一个内存流
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//        创建一个对象输出流
//        使我们写writeobject 时候真正写对象的流 写到哪里要看  byteArrayOutputStream 是怎么执行
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
//
        objectOutputStream.writeObject(user);
//        将流中的数据转成byte 数组
        byte[] bytes = byteArrayOutputStream.toByteArray();
        jedis.set("user".getBytes(StandardCharsets.UTF_8), bytes);
//    最后释放资源
        jedis.close();
    }


    @Test
    public void test3() throws IOException {
////        连接Redis
//        Jedis jedis =new Jedis("10.9.45.184",6379);
//
//      创建一个jedis c池
        JedisPoolConfig poolConfig = new JedisPoolConfig();

//        设置最大空闲
        poolConfig.setMaxIdle(20);
//        设置最大总数   数量  不能再扩容器
        poolConfig.setMaxTotal(1024);
//        最小空闲
        poolConfig.setMinIdle(5);
//      连接redis
        JedisPool jedisPool = new JedisPool(poolConfig, "10.9.45.184", 6379);
//      获取连接对象
        Jedis jedis = jedisPool.getResource();

        jedis.close();
    }


    @Test
    public void test4() {
//       1 连接Redis
        Jedis jedis = new Jedis("10.9.45.184", 6379);

        long l = System.currentTimeMillis();
        System.out.println(l);
//       获取一个管道
        Pipeline pipelined = jedis.pipelined();

        for (int i = 0; i < 100000; i++) {
            pipelined.incr("age");
        }

        //4. 执行命令
        List<Object> list = pipelined.syncAndReturnAll();

        System.out.println(System.currentTimeMillis() - l);

        System.out.println(list);
        //        3 释放资源
        jedis.close();
    }

    @Test
    public void RedisClient() throws ExecutionException, InterruptedException {
//       1 连接Redis
//        Jedis jedis=new Jedis("",6379);
//      获取地址
        RedisURI redisURI = RedisURI.create("redis://10.9.45.184:6379");
//     建立连接
        RedisClient client = RedisClient.create(redisURI);

//        String age = client.connect().sync().get("age");
//        System.out.println(age);

//      异步 连接
        RedisAsyncCommands<String, String> async = client.connect().async();
        RedisFuture<String> future = async.get("age");
        String s = future.get();
        System.out.println(s);

    }


}
